Blender Geometry Nodes Part 1
hr.icon
1. はじめに
以下のチュートリアル映像をベースに解説する。
https://www.youtube.com/watch?v=aO0eUnu0hO0
下映像は、Blenderのバージョンが低いのでGeometry Nodesの仕様も古いが、冒頭の制作例はGeometry Nodeで何ができるかわかりやすい。
https://www.youtube.com/watch?v=52UYqe3zdxQ&t
(参考)Geometry Nodeを使えばRhinoのGrasshopperのようなParametric Designも可能
https://www.youtube.com/watch?v=T8tHLJ65syA
(参考)Geometry Nodeの教科書
hr.icon
2. Blenderの準備
Blenderを起動する。
https://gyazo.com/7aa39c08a795699ce70b085648d22754
プロジェクトファイルを任意の場所に保存する。
https://gyazo.com/0d26e017047407be36b17cd00e4ef538
hr.icon
3. Geometry Node Editor
3.1 Geometry Node Editorの表示
WorkspaceをGeomery Nodesに切り替える。
下方のTimelineパネルを上に広げて、Geometyr Node Editorに切り替えてもよい。
https://gyazo.com/ee622fd9dfa36901812fe63db027f37a
Cubeを選択してEdit Modeで任意のVertexを選択する。
Gキーで移動すると左上のSpread Sheetの数値が変更されるので、オブジェクトの座標値が取得されていることがわかる。
https://gyazo.com/b2c083110c66e0d2aef9f45147989f02
今回はSpread Sheetを使わないので、右上の3D Viewportを左上パネル(Spreadsheet)に統合する。
https://gyazo.com/7b1ea18b01488aec1b17a091f9d6b389
Cubeが選択されている状態で、Geometry Node Editorパネル上部真ん中のNewをクリックする。
https://gyazo.com/57cb55f90309c95c80dc31bea61dcacc
Geometry NodesはPost Processing(ポスプロ、後処理)の位置づけであり、元のMesh(今回はCube)をGroup Inputとして、その先にGroup Outputが接続された状態で表示される。Group Outputは入力したものをModifierを経由して表示する。
表示が小さい場合はWheelでスケールする。
Geometry Nodeの処理方向はTouchDesignerと同じく左から右へ流れる。
Group InputとGroup Outputの間にNodeを追加してアルゴリズムを構築する。
https://gyazo.com/e77ef3b247ab0ec66eee8c94496f48f2
3.2 Nodeの基本操作
EditorのView操作は、3D Viewportと同じマウス操作
ワイヤリング:各Nodeの出力/入力からドラッグして接続
ワイヤ削除:Nodeの入力から外す
ワイヤ削除(複数):Nodeの入力から削除したいワイヤ側にドラッグすると赤色に変化して削除される
(参考デモ)Geomerty Node Editor上でMeshを追加してTransform Geometryで2つ見えるようにした後、Join Geomertyに2つ以上のオブジェクトを接続。その後、Join Geometryの入力からワイヤを外す。
Nodeの削除:選択してXキー、選択してfn+Delete、右クリックしてメニューからDelete
ワイヤリングとNode追加:Nodeの出力かドラッグ
3.3 Nodeの追加
Addメニュー
SHIFT+Aのメニューから
SHIFT+Aの検索から
3.4 Nodeの選択
マウス左クリックして一つのNodeを選択
マウル左ドラッグで領域選択により複数のNodeを選択
aキーですべてのNode選択
hr.icon
4. Transform Geometry
半角英数で操作すること
AddメニューもしくはSHIFT+AからGeometry > Operations > Transform Geometryを追加する。
https://gyazo.com/2c3b47d2d8269a393080635d19e715d0
BlenderのGeometry Nodeではワイヤ上にNodeをドラックするだけで接続される。
サイドバーはNキーで非表示にしておく。
https://gyazo.com/05928ac4f142ba7391d31a55deee2d14
Transform GeometryのTranslation、Rotation、Scaleを修正してみよう。
https://gyazo.com/e373c00bc79aced3c90e91e5c6d3a910
Edit Modeにすれば、もとのCubeが保持されていることがわかる。
この状態でVertex, Edge, Faceを選択して編集すれば、Transform後にも反映される。
https://gyazo.com/4720f55f40a34c4a25993b358baeb45a
Geometry NodesはModifierとして処理されている。
必要に応じて、他のModifierとの組み合わせや、Geometry Nodesの複数処理、表示/非表示、適用を行うことができる。
https://gyazo.com/059936750a921040e1523ae116738169
hr.icon
5. Mesh Boolean ※Old Tutorial Movie
Mesh > Operations > Mesh Booleanを追加して、下図のように接続する。
もとのCubeとTransform後のCubeがBoolean演算(Difference, 差分)される。
https://gyazo.com/e5270749be2b100546b304cb75894736
Boolean演算にはDifference(差分)、Union(合成)、Intersect(交差)の3種類があり、UnionとIntersectではMesh2に入力する必要がある。
参考
hr.icon
6. Dissolve (Cmd+X)
ここまでは練習なので、改めてGroup InputとGroup Output以外を削除しておく。
普通に削除するとワイヤも消えるので、Cmd+X(Dissolve, 分解)でワイヤを残したままNodeのみ削除する。
https://gyazo.com/ba9c776f1c445ef293dbaf72f32597af
hr.icon
7. Distribute Points on Faces
SHIF+A(追加)で表示されるメニューからPoint > Distribute Points on Facesを追加する。
Distribute Points on Facesで表示される点はレンダリングされない(Blender 4だとレンダリングされると思う)。
https://gyazo.com/db116321b8b4368b37f227ae5bf66f3c
パラメータのDensity(密度)でPointの数を変更できる。
https://gyazo.com/f8e034287dfcaf6f98e2499cf8bb7b5ahttps://gyazo.com/f5c860e63c3733d00424980065356ab8
YouTubeではこのPointはレンダリングされないと説明しているが、Blender 4.2上で試したところレンダリングされた。バージョンに依存するかもしれないが未確認
https://gyazo.com/0afe7c5f88f6d35fa5284866aeb52850
上記(2022.7.17記事)にもポイントはレンダリングされないと述べられている。
hr.icon
8. Join Geometry
Distribute Points on Facesでは、もとのオブジェクトは表示されないので、Join Geometryを利用する。
Geometry > Join Geometryを追加して下図のように接続する。
https://gyazo.com/dc450541867fb0512b6882d565e1bc38
やはりPointsがレンダリングされてしまう。
レンダリングしたくない場合はModifierのRenderボタンをオフにすればよいが、そもそも正しい状態なのか不明
https://gyazo.com/c89e63418ad9330a5a59f80b69cb90b0
hr.icon
9. Instance on Points
Instances > Instance on Pointsを追加して、下図のように接続する。
まだInstance元を接続していないのでPointが消える
https://gyazo.com/812d2494593d51cc65d51686afe01814
hr.icon
10. インスタンス元のCube作成
3D Viewportで、砂糖の粒にあたるインスタンス元のCube(Cube.001)を作成する。
最初のCubeに重ならないように移動する。スケールは0.1(s, point, 1)。
このとき最初のCubeを選択しないようにOutlineで確認しながら行う。
https://gyazo.com/153b9d80862ffcac64d529e597711db9
hr.icon
11. インスタンスオブジェクトの割当て
他のオブジェクトを選択中でも、CubeオブジェクトのGeometry Nodeを表示し続けたいので、下図のピンをクリックする。
https://gyazo.com/d427c51ae32aaf2d73c00140d556936e
OutlinerでCube.001の名前をsugar crystalに変更する。
https://gyazo.com/d6862f880e980cb6fed0b18c61c042f3
Outlinerのsugar crystalをGeometry Node Editorにドラック&ドロップする。
https://gyazo.com/56f08b0f9b010649b4206d6d4eeec47e
自動的にObject Infoノードが追加されて、sugar crystalが登録されていることがわかる。
https://gyazo.com/fb817adbdd1a023d38fd0d44a4a5ad70
下図のようにObject InfoをInstace on PointsのInstanceソケットに接続する。
https://gyazo.com/c2d7fd38adf5ec4fe2940f0b339afe20
上図でわかるように、sugar crystalの0.1スケールが反映されていない。
3D Viewport上でCmd+Aを押し、ApplyメニューのScaleをクリックして適用する。
https://gyazo.com/6909fdb41b58621b880197f56a92bc29
Pointの位置にsugar crystalのスケールで配置される。
https://gyazo.com/3e7d51166296efcf1841f7741573aded
Distribute Points on FacesのDensityを調整してみよう。
https://gyazo.com/2bfdb878d921c4dd1505e20986122e2f
hr.icon
12. How to randomize rotation and scale
12.1 RotationとScaleの調整(実験)
Instance on PointsのパラメータのRotationとScaleから変更する。
変更後は次の作業のために戻しておく。
https://gyazo.com/c88d3c273b62e9670e7be69ccf15321b
12.2 Randomize Rotation
Unilities > Random Valueを追加
Random ValueのData TypeをVector(xyzの3要素のデータタイプ)に変更する。
Instance on PointsのRotationに接続
Rotationはラジアンであり、0〜360度の範囲でランダム数値とする場合、Maxをtau(360度=2π)に設定する。tauと入力すると自動的に6.283に変換される。
https://gyazo.com/4f89cf1b1fc0ac4e66b9626b6dbd7245
Randomの応用例 チュートリアル映像の12:33〜12:43
https://gyazo.com/75204cafcbb9d786df3c04dcb66f3fdahttps://gyazo.com/489d2c62aef87c6fe2e213249c6fac80
12.2 Randomize Scale
Random Valueノードを選択した状態で、SHIFT+D(複製)する。
SHIF+Dを押した後、マウスを動かして左クリックで確定する。
Random ValueのValueソケットからInstance on PointsのScaleソケットに接続する。
https://gyazo.com/0eef60ba444850d1476dbc1ae7e398a4
上図では、Maxに6.283が設定されたままなので、0〜6.283倍でXYZがそれぞれ独立したランダムスケールとなっている。
今回はUniform Scale(XYZが等倍)とするので、データタイプをVectorからFloatに戻す。
データタイプを変更した場合は接続が切れるので、あらためて接続し直す。
以下の値を設定する。ここでの数値も実験段階なので、後半で自分好みに調整してよい。
Min: 0.1 ※小さすぎるものは必要ないので最小値も設定
Max: 0.4
Distribute Points on FacesのDensityも調整
https://gyazo.com/4f1832cdaa12c702af1770f0206cdca4